OAUTH Zafiyeti
OAUTH Zafiyeti Nedir Nasıl Tespit Edilir?
Bazı web siteleri Facebook Github gibi bir çok web sitenin hesabıyla giriş yapmamızı veya hesapları eklememizi sağlar. Bunu Facebook ile giriş yap şeklinde de görebiliriz. Örneğin aşağıda bir oyun web sitesinde facebook ile giriş yapabileceğimiz bir yer bulunuyor:
Bunun gibi girişleri birçok sayfada görmemiz mümkün. Test aşamasında eğer web site doğru yapılandırılmamış ise ortaya birçok açık ortaya çıkabiliyor. Örneğin bir web sitesinde saldırgan Facebook ile oturum aç dedi bu esnada bulunduğu web sitesi Facebook’a bir kod gönderir ve kullanıcıya giriş yapma sayfası gelir. Ve saldırgan bilgileri girdikten sonra Facebook bir authentication kodu vererek bulunduğumuz web sitesinde Facebook ile giriş yapmamızı sağlar eğer Facebook’un verdiği anahtar saldırgan üzerinden web siteye iletiliyorsa bu doğrulama manipüle edilebilir bu tamamen web sitesinde bulunan yapılandırılmayla alakalı bir durum olduğu için farklı mail ile de doğrulama yapabiliriz. Veya doğrulama paketi üzerinde kullanıcıya ait bir doğrulama bulunmuyorsa sosyal mühendislik ile csrf saldırılarına ve hesabı devralmaya gidebilir. İstek yapılan Facebook adresi üzerinde değişiklikler yapılarak SSRF zafiyeti oluşturulabilir. Yani hesab güvenliğini Facebook’a bırakmış olsa bile aslında kendi sayfasının da yapılandırılmasını doğru yapmalıdır.
PortSwigger’ın labaratuvarındaki örneklere bakalım.
Bu labaratuvar da OAuth hizmetinde bir sorun olduğunu ve şifre olmadan başkasının hesabıyla giriş yapabileceğimizi söylüyor. Ve labaratuvarı çözmek için carlos@carlos-montoya.net mail adresine sahip bir hesaba erişim elde etmemizi istiyor
Labaratuvara giriyoruz ve my account butonuna tıklayarak aşağıdaki gibi bir sosyal medya hesabıyla giriş yapacağımız bir sayfa geliyor.
Bu kısımda bilgileri girdikten sonra BurpSuite ile paketleri takip etmeye ve paket akışını incelemeye başlıyoruz. (Paket akışı sırasında sosyal medyadan hangi bilgileri alacağı hakkında bilgi veriyor continue diyoruz.)
Ve yukarıdaki gibi mail adresinin bulunduğu ve bulunduğumuz web sitede doğrulanmış olarak gelecek bir paket geliyor. Biz bu paketteki email parametresini manipüle ederek başka bir hesap ile giriş yapmaya çalışacağız.
Yukarıdaki gibi manipüle edip sosyal medyanın onaylamış olduğu paketle oynama yapmış oluyoruz ve Forward ediyoruz.
Ve başarılı carlos@carlos-montoya.net mailine sahip bir hesaba erişmiş oluyoruz.
Bir başka labaratuvarına bakalım.
Bu labda kendi sosyal medya hesabımıza CSRF zafiyetini de kullanarak sosyal mühendislik ile adminin giriş yapması. Yani admin bir sayfaya giriyor ve CSRF zafiyetine maruz kalıyor ve admini olduğu web sitesinde başka bir sosyal medya hesabını bağlamış oluyor. Böylece saldırgan kendi sosyal medya hesabı ile giriş yaparak admin hesabına girmiş olacak.
Ve labaratuvarı tamamlamak için carlos kullanıcısını sileceğiz.
Wiener peter ile giriş yaptıktan sonra yukarıdaki sayfa ile karşılaşıyoruz. “Attach a social profile” butonuna tıklıyoruz. BurpSuite açtıktan sonra sosyal medya hesabımızı giriyoruz.
Ve karşımıza yukarıdaki gibi sosyal medya tarafından doğrulanmış bir paket geliyor. Sağ click ile “copy url” diyoruz ve onaylanmış paketin kullanılmaması için BurpSuite üzerinde Drop diyoruz.
Yukarıdaki gibi saldırgan web sitesinde iframe kodu ile kurbanın sitesine bağlandığında hesabına sosyal medya ile giriş yapmasını sağlayacak.
Exploit server üzerinde kodu yazdıktan sonra Stored > Deliver Exploit to victim
Diyoruz ve admine bu sayfayı tıklattırdığımızı varsayıyoruz.
Hesaptan çıkış yapıyoruz ve “login with social media” diyerek sosyal medya ile giriş yap dediğimizde admin paneline ulaşmış oluyoruz.
Artık admin panel üzerinden carlos hesabına delete diyoruz ve çözmüş oluyoruz.
Peki Gerçek Web Sitelerinde de Laboratuvarlardaki Gibi Çıkar Mı?
Evet bu mümkün, test aşamasında nasıl bir doğrulama yapıyor yapısını anlayarak paketleri inceleyerek zafiyet bulabiliriz. Küçük bir örnek vermek gerekirse paketleri incelerken zafiyetli sitenin sosyal medyaya istek attığını görebilir bunun üzerine SSRF zafiyetini test edebiliriz. Ek olarak Path Traversal denemeleri yapabiliriz. Özet olarak bu zafiyetle de sıklıklı bu şekilde karşılaşılabilir.
Aşağıda Birkaç OAuth Zafiyeti Örnek Raporlarını Bulabilirsiniz:
https://hackerone.com/reports/1074047
https://hackerone.com/reports/202781
https://hackerone.com/reports/835437